//
//  LLHomeViewController.swift
//  LLWeibo09
//
//  Created by 林 on 16/3/22.
//  Copyright © 2016年 lin. All rights reserved.
//

import UIKit

class LLHomeViewController: LLBaseTableViewController {
    
    // MARK: - 属性
    private let ReuseIdentifier = "ReuseIdentifier"
    
    /// 微博数据 
    var statuses: [LLStatus]? {
        didSet {
            self.tableView.reloadData()
        }
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        // 登陆以后才做后面的操作
        if !LLUserAccountViewModel.shareInstance.userLogin {
            return
        }
        
        setupNavigationBar()
        setupTitleButton()
        prepareTableView()
        
        // 使用VM加载数据 
        LLStatusViewModel.sharedInstance.loadStatus { (statuses, error) -> () in
            if error != nil {
                print("加载微博数据出错了: \(error)")
                return
            }
            
            // 加载微博数据成功,并且字典转模型完成了, statuses放的是微博模型数组
            //            print("加载微博数据成功: \(statuses)")
            
            // 当获取到数据后,将数据赋值给控制器的属性,让tableView来根据statuses来显示cell
            self.statuses = statuses
        }
    }
    
    private func prepareTableView() {
        // 注册cell
        tableView.registerClass(LLStatusCell.self, forCellReuseIdentifier: ReuseIdentifier)
        
//        tableView.rowHeight = 80
        // cell的高度根据cell里面的子控件来自动布局来确定高度
        // 0.添加预估行高
        // 1.rowHeight = UITableViewAutomaticDimension
        // cell里面的约束要确定好.contentView的高度约束要根据子控件来,最终cell的高度会根据ContentView的高度来
        tableView.estimatedRowHeight = 100
        tableView.rowHeight = UITableViewAutomaticDimension
        
        // 取消cell之间的分割线
        tableView.separatorStyle = UITableViewCellSeparatorStyle.None
    }
    
    /// 设置导航栏title
    private func setupTitleButton() {
        let name = LLUserAccountViewModel.shareInstance.userAccount?.screen_name
        let titleButton = LLHomeTitleButton(title: name, imageName: "navigationbar_arrow_down")
        titleButton.addTarget(self, action: "didClickTitleButton:", forControlEvents: UIControlEvents.TouchUpInside)
        navigationItem.titleView = titleButton
    }
    
    /// 设置导航栏左右
    private func setupNavigationBar() {
        navigationItem.leftBarButtonItem = UIBarButtonItem(imageName: "navigationbar_friendsearch", target: self, action: "didClickLeftItem")
        navigationItem.rightBarButtonItem = UIBarButtonItem(imageName: "navigationbar_pop", target: self, action: "didClickRightItem")
    }
    
    // MARK: - 标题按钮点击事件
    @objc private func didClickTitleButton(button: LLHomeTitleButton) {
        // 当点击按钮的时候selected取反
        button.selected = !button.selected
        
        // 按钮选中的时候箭头朝上,不选中就朝下
        // UIView旋转动画特点:1.两边一样远,顺时针, 2.哪边近就往哪边走
        UIView.animateWithDuration(LLDefaultDuration) { () -> Void in
            button.imageView?.transform = button.selected ? CGAffineTransformMakeRotation(CGFloat(M_PI - 0.01)) : CGAffineTransformIdentity
        }
        
        if button.selected {
            // iOS8 以后 popoverPresentationController
            let popoverVC = LLPopoverViewController()
            
            // 设置modal的显示样式
            popoverVC.modalPresentationStyle = .Popover
            
            // 设置popoverPresentationController的代理,实现代理的方法,来让popover不要适配iPhone
            popoverVC.popoverPresentationController?.delegate = self
            
            // popover的箭头指向titeView,默认指向左上角
            popoverVC.popoverPresentationController?.sourceView = navigationItem.titleView
            // 设置sourceView.bounds给sourceRect
            popoverVC.popoverPresentationController?.sourceRect = navigationItem.titleView!.bounds
            // 设置popover显示的大小
            popoverVC.preferredContentSize = CGSize(width: 200, height: 44 * popoverVC.titles.count)
            
            
            // 弹出
            presentViewController(popoverVC, animated: true, completion: nil)
        }
    }
    
    func didClickLeftItem() {
        print("didClickLeftItem")
    }
    
    func didClickRightItem() {
        print("didClickRightItem")
    }
}

// MARK: - 扩展 LLHomeViewController, 将 tableView相关的方法都写在这个扩展里面
extension LLHomeViewController {
    // 千万不要写到这个方法,返回多少组
    //    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    //    }
    
    // 返回多个cell
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        // statuses?: statuses = nil 的时候就往后面走
        // ??: 表示 ?? 前面的可选如果没有值 就使用 ?? 后面的,
        return statuses?.count ?? 0
    }
    
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier(ReuseIdentifier, forIndexPath: indexPath) as! LLStatusCell
        
        // 设置cell的内容
//        cell.textLabel?.text = statuses?[indexPath.row].text
        cell.status = statuses?[indexPath.row]
        
        return cell
    }
    
    // 取消cell的选中
    override func tableView(tableView: UITableView, shouldHighlightRowAtIndexPath indexPath: NSIndexPath) -> Bool {
        // cell不要高亮
        return false
    }
}

// MARK:- 扩展 CZHomeViewController 实现 UIPopoverPresentationControllerDelegate协议
extension LLHomeViewController: UIPopoverPresentationControllerDelegate {
    // 不让popover适配iPhone,默认适配.全屏的,不适配就是popover的效果
    func adaptivePresentationStyleForPresentationController(controller: UIPresentationController, traitCollection: UITraitCollection) -> UIModalPresentationStyle {
        return UIModalPresentationStyle.None
    }
    
    // 系统会询问我们是否需要关闭popover
    func popoverPresentationControllerShouldDismissPopover(popoverPresentationController: UIPopoverPresentationController) -> Bool {
        // 让箭头转下来
        let titleButton = navigationItem.titleView as! LLHomeTitleButton
        didClickTitleButton(titleButton)
        
        return true
    }
    
}
